有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java JScience:如何打印整个实数?

我写了一些测试代码,它可以计算出我想要计算的Pi值。它看起来像这样:

public static void piCalculatorMethod1() {
    int iteration = 1000000;

    Real pi = Real.valueOf(0);

    for (int i = 1; i < iteration + 1; i++) {
        Real current = pi;
        Real addendum = Real.valueOf((1/Math.pow(i, 2)));

        pi = current.plus(addendum);
    }

    pi = pi.times(6);

    pi = pi.sqrt();

    System.out.println(pi.toString());
}

非常不幸的是,输出决定如下所示:

3.14159169866

我很确定最终值比这个精确得多,因为我已经看到了他们实际添加的值,这比这个精确得多

如何让System.out.println向我显示整个实数而不是前几个数字


共 (1) 个答案

  1. # 1 楼答案

    你可能需要质疑你关于级数收敛性的假设。π的这种近似依赖于Basel problem的欧拉解。根据经验,下面的例子发现了许多迭代计数与π2/6的偏差。如您所见,迭代计数中的每个数量级添加的精度不超过一个小数位数

    代码:

    Real PI_SQUARED_OVER_6 = Real.valueOf(Math.pow(Math.PI, 2) / 6);
    for (int p = 0; p < 7; p++) {
        int iterations = (int) Math.pow(10, p);
        Real pi = Real.valueOf(0);
        for (int i = 1; i < iterations + 1; i++) {
            pi = pi.plus(Real.valueOf(1 / Math.pow(i, 2)));
        }
        System.out.println("10^" + p + ": " + PI_SQUARED_OVER_6.minus(pi));
    }
    

    控制台:

    10^0: 6.44934066848226E-1
    10^1: 9.5166335681686E-2
    10^2: 9.950166663334E-3
    10^3: 9.99500166667E-4
    10^4: 9.9995000167E-5
    10^5: 9.999950000E-6
    10^6: 9.99999500E-7